Balanza entre Embarques y Desembarques por paises

En este post vamos a tratar de hacer una tabla para ver el balance comercial con todos los paises que operó el puerto de Avilés en el año 2024.
Author

José Ramón Cuesta

Published

April 10, 2025

Cargamos los datos los paquetes necesarios, así como los que venimos trabajando del Puerto de Avilés.

library(here)
library(dplyr)
library(ggplot2)
library(plotly)
library(DT)

load(here("puerto_aviles.RData"))  

Queremos visualizar en un gráfico y una tabla la balanza comercial entre embarques y desembarques por paises. Podemos empeza primero por la tabla.

# Crear columna según tipo de operación
puerto_aviles <- puerto_aviles %>%
  filter(`Fecha Entrada` >= "2024-01-01" & `Fecha Entrada` <= "2024-12-31") %>%
  mutate(
    Pais_final = ifelse(Operación == "Embarque", as.character(Pais_dest), as.character(Pais_orig))
  )
# Resumen de toneladas por país y operación
resumen_tabla <- puerto_aviles %>%
  group_by(Pais_final, Operación) %>%
  summarise(Tonelaje_total = sum(Tonelaje, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(Tonelaje_total))

resumen_tabla
# A tibble: 73 × 3
   Pais_final   Operación   Tonelaje_total
   <chr>        <fct>                <dbl>
 1 BELGICA      Desembarque       1375075.
 2 ESPAÑA       Desembarque        553107.
 3 PAISES BAJOS Desembarque        480509.
 4 ITALIA       Embarque           398873 
 5 PANAMA       Desembarque        316812.
 6 ESPAÑA       Embarque           304544.
 7 PAISES BAJOS Embarque           183971.
 8 BELGICA      Embarque           146401.
 9 FRANCIA      Embarque           139576.
10 ESPAÑA       Trasbordo          134743.
# ℹ 63 more rows

Ahora podemos ver la tabla de resumen con DT::datatable para que sea interactiva.

DT::datatable(
  resumen_tabla,
  caption = "Tonelaje por país y operación (Puerto de Avilés)",
  options = list(pageLength = 10)
)

Por último generamos el gráfico de barras interactivo con ggplotly. En este caso, como el gráfico es un poco más complejo, lo generamos primero con ggplot y luego lo convertimos a interactivo.

# Resumen por país final
resumen_paises <- puerto_aviles %>%
  group_by(Pais_final, Operación) %>%
  summarise(Tonelaje_total = sum(Tonelaje, na.rm = TRUE), .groups = "drop") %>%
  group_by(Pais_final) %>%
  mutate(Total_por_pais = sum(Tonelaje_total)) %>%
  ungroup()

# Gráfico con ggplot
g <- ggplot(resumen_paises, aes(x = reorder(Pais_final, -Total_por_pais), y = Tonelaje_total, fill = Operación)) +
  geom_bar(stat = "identity") +
  labs(
    title = "Tráfico total por país (Puerto de Avilés)",
    x = "País (origen para desembarque, destino para embarque)",
    y = "Toneladas",
    fill = "Operación"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Convertir a interactivo
ggplotly(g)